package com.example.learning3;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;
import com.github.mikephil.charting.formatter.IValueFormatter;
import com.github.mikephil.charting.utils.ViewPortHandler;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.Map;

public class MainActivity3 extends AppCompatActivity {
    String[] week={};
    private LineChart line;
    Button button_back_to_desk;
    Button button_self;
    Button button_setting;
    String data_year;
    String data_month;
    String data_day;
    Calendar cal;
    String today_year;
    String today_month;
    String today_day;
    int today_week;
    int learning_time_hour;
    int learning_time_minute;
    int learning_time_second;
    int already_learning_day=0;
    TextView textView_total_learning_time;
    int total_learning_time=0;
    List<Entry>list_second=new ArrayList<>();
    List<Entry>list_minute=new ArrayList<>();
    List<Entry>list_hour=new ArrayList<>();
    List<Entry>list=new ArrayList<>();
    List<String>data=new ArrayList<>();
    int i=0;
    @SuppressLint({"Range", "SetTextI18n"})
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        seton();
        textView_total_learning_time=findViewById(R.id.textView_total_learning_time);

        //
        cal= Calendar.getInstance();
        today_year = String.valueOf(cal.get(Calendar.YEAR));
        today_month = String.valueOf(cal.get(Calendar.MONTH)+1);
        today_day = String.valueOf(cal.get(Calendar.DATE));
        today_week=cal.get(Calendar.DAY_OF_WEEK)-1;
        //查询数据库数据,100毫秒一次


        SQLiteOpenHelper Helper=MySQliteOpenHelper.getInstance(MainActivity3.this);
        SQLiteDatabase db=Helper.getReadableDatabase();
        if (db.isOpen()) {
            @SuppressLint("Recycle") Cursor cursor = db.rawQuery("select * from learning_data", null);
            while (cursor.moveToNext()) {
                if (cursor.getString(cursor.getColumnIndex("data_year")).equals("year")) {
                    break;
                }
                i++;
                int _id = cursor.getInt(cursor.getColumnIndex("_id"));
                data_year = cursor.getString(cursor.getColumnIndex("data_year"));
                data_month = cursor.getString(cursor.getColumnIndex("data_month"));
                data_day = cursor.getString(cursor.getColumnIndex("data_day"));
                data.add(data_year+"/"+data_month+"/"+data_day);
                learning_time_hour = cursor.getInt(cursor.getColumnIndex("learning_time_hour"));
                learning_time_minute = cursor.getInt(cursor.getColumnIndex("learning_time_minute"));
                learning_time_second = cursor.getInt(cursor.getColumnIndex("learning_time_second"));
                total_learning_time+=(learning_time_hour+(learning_time_minute+learning_time_second/60)/60);
                list.add(new Entry(already_learning_day,learning_time_hour*60+learning_time_minute+learning_time_second/60));
                already_learning_day++;
            }
            cursor.close();
            db.close();
        }
        if(i==0){
            Toast.makeText(MainActivity3.this, "你还没有学习记录哦，赶快去学习吧", Toast.LENGTH_SHORT).show();
        }else{
            //设置总的学习时长
            textView_total_learning_time.setText(String.valueOf(total_learning_time)+"小时");
            ///
            line = findViewById(R.id.line);
//        list.add(new Entry(0,3));
            //list是你这条线的数据  "语文" 是你对这条线的描述（也就是图例上的文字）
            LineDataSet lineDataSet=new LineDataSet(list,"学习时长");
            LineData lineData=new LineData(lineDataSet);
            line.setData(lineData);

            //折线图背景
            line.setBackgroundColor(0x00000000);   //背景颜色
            line.getXAxis().setDrawGridLines(false);  //是否绘制X轴上的网格线（背景里面的竖线）
            line.getAxisLeft().setDrawGridLines(false);  //是否绘制Y轴上的网格线（背景里面的横线）

            //对于右下角一串字母的操作
            line.getDescription().setEnabled(false);                  //是否显示右下角描述
            line.getDescription().setText("这是修改那串英文的方法");    //修改右下角字母的显示
            line.getDescription().setTextSize(20);                    //字体大小
            line.getDescription().setTextColor(Color.RED);             //字体颜色

            //图例
            Legend legend=line.getLegend();
            legend.setEnabled(true);    //是否显示图例
            legend.setPosition(Legend.LegendPosition.BELOW_CHART_CENTER);    //图例的位置

            //X轴
            XAxis xAxis=line.getXAxis();
            xAxis.setDrawGridLines(false);  //是否绘制X轴上的网格线（背景里面的竖线）
            xAxis.setAxisLineColor(Color.WHITE);   //X轴颜色
            xAxis.setAxisLineWidth(1);           //X轴粗细
            xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);        //X轴所在位置   默认为上面
            xAxis.setValueFormatter(new IAxisValueFormatter() {   //X轴自定义坐标
                @Override
                public String getFormattedValue(float v, AxisBase axisBase) {
                    for (int i=0;i<already_learning_day;i++){
                        if (i==v){
                            return data.get(i);
                        }
                    }
                    return "";//注意这里需要改成 ""
                }
            });
            xAxis.setAxisMaximum(already_learning_day);   //X轴最大数值
            xAxis.setAxisMinimum(0);   //X轴最小数值
            //X轴坐标的个数    第二个参数一般填false     true表示强制设置标签数 可能会导致X轴坐标显示不全等问题
            xAxis.setLabelCount(already_learning_day,false);

            //Y轴
            YAxis AxisLeft=line.getAxisLeft();
            AxisLeft.setDrawGridLines(false);  //是否绘制Y轴上的网格线（背景里面的横线）
            AxisLeft.setAxisLineColor(Color.WHITE);  //Y轴颜色
            AxisLeft.setAxisLineWidth(1);           //Y轴粗细
            AxisLeft.setValueFormatter(new IAxisValueFormatter() {  //Y轴自定义坐标
                @Override
                public String getFormattedValue(float v, AxisBase axisBase) {
                    return "";
                }
            });
            AxisLeft.setAxisMaximum(60);   //Y轴最大数值
            AxisLeft.setAxisMinimum(0);   //Y轴最小数值
            //Y轴坐标的个数    第二个参数一般填false     true表示强制设置标签数 可能会导致X轴坐标显示不全等问题
            AxisLeft.setLabelCount(60,false);
            //是否隐藏右边的Y轴（不设置的话有两条Y轴 同理可以隐藏左边的Y轴）
            line.getAxisRight().setEnabled(false);

            //折线
            //设置折线的式样   这个是圆滑的曲线（有好几种自己试试）     默认是直线
            lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);
            lineDataSet.setColor(Color.GREEN);  //折线的颜色
            lineDataSet.setLineWidth(2);        //折线的粗细
            //是否画折线点上的空心圆  false表示直接画成实心圆
            lineDataSet.setDrawCircleHole(false);
            lineDataSet.setCircleHoleRadius(3);  //空心圆的圆心半径
            //圆点的颜色     可以实现超过某个值定义成某个颜色的功能   这里先不讲 后面单独写一篇
            lineDataSet.setCircleColor(Color.RED);
            lineDataSet.setCircleRadius(3);      //圆点的半径
            //定义折线上的数据显示    可以实现加单位    以及显示整数（默认是显示小数）
            lineDataSet.setValueFormatter(new IValueFormatter() {
                @Override
                public String getFormattedValue(float v, Entry entry, int i, ViewPortHandler viewPortHandler) {
                    if (entry.getY()==v){
                        return v+"分钟";
                    }
                    return "";
                }
            });
        }
   }
   public void seton(){
       button_back_to_desk=findViewById(R.id.button_back_to_desk);
       button_self=findViewById(R.id.button_self);
       button_setting=findViewById(R.id.button_setting);
       button_back_to_desk.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               Intent intent=new Intent();
               intent.setClass(MainActivity3.this,MainActivity.class);
               startActivity(intent);
               MainActivity3.this.finish();
           }
       });
       button_self.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               Intent intent=new Intent();
               intent.setClass(MainActivity3.this,self.class);
               startActivity(intent);
               MainActivity3.this.finish();
           }
       });
       button_setting.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               Intent intent=new Intent();
               intent.setClass(MainActivity3.this,setting.class);
               startActivity(intent);
               MainActivity3.this.finish();
           }
       });
   }

}